package login;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Hashtable;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import swim.sessionbeans.LoginRemote;

/**
 * Gestisce il login di un utente
 */

public class LoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public LoginServlet() {
		super();
	}

	/**
	 * Inserisce nel sistema un nuovo utente utilizzando i parametri inseriti
	 */
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

		response.setContentType("text/html");
		PrintWriter out = response.getWriter();

		try {

			Context ctx = getInitialContext();

			LoginRemote loginRemote = (LoginRemote) ctx.lookup("LoginRemote");

			String user = request.getParameter("user");
			String password = request.getParameter("password");

			Long id = loginRemote.loginUtente(user.trim(), password.trim());

			String esito;
			boolean isOK = false;

			if (id != -1) {
				esito = "<h1>L'utente ha effettuato il login correttamente</h1>";
				isOK = true;
			} else
				esito = "<h1>Login fallito!</h1>";

			request.setAttribute("esito", esito);
			request.setAttribute("isOK", isOK);
			request.setAttribute("idUtente", String.valueOf(id));

		} catch (Exception e) {
			e.printStackTrace();
			out = response.getWriter();
			out.print("<h1>Login fallito!! - errore! </h1>");
			out.print("<br><br><a href=\"/home-registrazione.html\"><b>Torna alla pagina di registrazione</b></a><br><br>");
		}

		RequestDispatcher dispatcher = request
				.getRequestDispatcher("/login.jsp");
		dispatcher.forward(request, response);

	}

	/**
	 * Ottiene il Context utilizzato in seguito per ottenere i riferimenti ai
	 * RemoteSystems
	 * 
	 * @return Context utilizzato per la lookUp
	 * @throws Exception
	 *             Eccezione lanciata nel caso il metodo non riesca ad ottenere
	 *             il Context
	 */
	static public Context getInitialContext() throws Exception {

		Hashtable<String, String> env = new Hashtable<String, String>();

		env.put(Context.INITIAL_CONTEXT_FACTORY,
				"org.jnp.interfaces.NamingContextFactory");
		env.put(Context.PROVIDER_URL, "localhost:1099");

		return new InitialContext(env);

	}

}
